package DailyQuestion;

public class 访问数组中的位置使分数最大_2786 {
    public long maxScore(int[] nums, int x) {
        long ret = nums[0];
        long[] dp = {Integer.MIN_VALUE, Integer.MIN_VALUE};
        // 此处值要尽可能小, 为后续判断dp为负数做准备!
        // 最后移动的元素 为偶数(0)时得分的最大值 和 为奇数(1)时得分的最大值
        dp[nums[0] % 2] = nums[0]; // 判断num[0]的奇偶并放入dp

        for (int i = 1; i < nums.length; i++) {
            int parity = (int) (nums[i] % 2); // 检测num[i]奇偶性
            long cur = Math.max(dp[parity] + nums[i], dp[1 - parity] - x + nums[i]);
            ret = Math.max(ret, cur);
            dp[parity] = Math.max(dp[parity], cur);
        }
        return ret;
    }
}
